//
// Description: 884. 高斯消元解异或线性方程组
// Created by Loading on 2022/5/30.
//

#include <bits/stdc++.h>

using namespace std;

constexpr int N = 110;

int a[N][N];
int n;

int gauss() {
    int r = 0;
    for (int c = 0; c < n; ++c) {
        int t = r;
        // 找到第 c 列的数不为 0 的行
        for (int i = r; i < n; ++i) {
            if (a[i][c]) {
                t = i;
                break;
            }
        }
        // 若每一行的第 c 列都是 0，则无解或无穷多解，当前不再操作
        if (!a[t][c]) {
            continue;
        }
        // 将选中的行换到第 r 行
        for (int i = 0; i < n + 1; ++i) {
            swap(a[t][i], a[r][i]);
        }
        // 将从 r + 1 行开始到第 n 行，第 c 列的数变成 0
        for (int i = r + 1; i < n; ++i) {
            if (a[i][c]) {
                for (int j = c; j < n + 1; ++j) {
                    a[i][j] ^= a[r][j];
                }
            }
        }

        ++r;
    }

    // 无解或无穷多解
    if (r < n) {
        for (int i = r; i < n; ++i) {
            // 出现 0 = 非0 情况，无解
            if (a[i][n]) {
                return 2;
            }
        }

        // 无穷多解
        return 1;
    }

    // 唯一解
    // 逆序推出每个未知数的值
    for (int i = n - 2; i >= 0; --i) {
        for (int j = i + 1; j < n; ++j) {
            a[i][n] ^= a[i][j] & a[j][n];
        }
    }

    return 0;
}

int main() {
    cin >> n;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n + 1; ++j) {
            cin >> a[i][j];
        }
    }

    int res = gauss();

    if (res == 0) {
        for (int i = 0; i < n; ++i) {
            cout << a[i][n] << endl;
        }
    } else if (res == 1) {
        cout << "Multiple sets of solutions" << endl;
    } else {
        cout << "No solution" << endl;
    }

    return 0;
}